function calculateDate(itemList, comment) {
    if (isNotEmpty(itemList)) {
        var jumpFlag = false;
        var lastBp;
        for (var s = 0; s < itemList.length; s++) {

            //获取单个对象
            var item = itemList[s];
            if (jumpFlag && item.type === 'old') {
                itemList.splice(s, 1);
                s--;
                continue;
            }
            if (item.priceType === "BP") {
                lastBp = {
                    itemNbrT: item.itemNbrT,
                    effDate: item.effDate,
                    expDate: item.expDate,
                    priceType: item.priceType,
                    type: 'new',
                    priceTrait: item.priceTrait,
                    retail: item.retail,
                    size: item.size,
                    rate: item.rate,
                    id: item.id
                };
            }
            var y = s + 1;
            var x = s - 1;
            var itemBef;
            var itemAfter;
            if (x >= 0) {
                //获取前一时间段
                itemBef = itemList[x]
            }
            if (y === itemList.length) {

                if (!isNull(itemBef) && comment === 'retail-NoBP' && (!isNull(item.effDate) && !isNull(itemBef.expDate) && item.effDate < itemBef.expDate)) {
                    //判断下一条数据是不是再前一条范围内，也就是说你的下一条数据不能小于你的前一条数据，小于删除
                    var flag2 = isDateIntersection(item.effDate, item.expDate, itemBef.effDate, itemBef.expDate);
                    if (flag2 && item.type === 'old') {
                        itemList.splice(s, 1);
                        continue;
                    }
                }

                //只有BP或者SB的时候需要补充最后时间为永久时间
                if (!isNull(item.priceType) && item.priceType === 'BP' || item.priceType === 'SB') {
                    item.expDate = '2049-12-31';
                }
                //如果最后一个的变价类型不是BP,则补充最后BP的开始时间为最后一个数据的结束时间的BP数据
                if ((item.priceType === "AR" || item.priceType === "TR") && lastBp !== undefined) {
                    lastBp.effDate = item.expDate;
                    insert(itemList, y, lastBp)
                } else if (item.priceType === 'SB' && lastBp !== undefined) {
                    var bpList = itemList.filter(function (v) {
                        return v.priceType === 'BP'
                    });
                    if (isNotEmpty(bpList)) {
                        var sortBp = bpList.sort(function (a, b) {
                            return a.effDate > b.effDate ? 1 : -1;
                        });
                        lastBp.effDate = sortBp[0].expDate;
                        insert(itemList, y, lastBp)
                    }
                }
                break;
            } else {
                //获取下一个时间段
                itemAfter = itemList[y];
            }

            if (comment === 'retail-new') {
                if (!isNull(item.type) && item.type === 'new') {
                    if (!isNull(itemAfter) && itemAfter.type === 'new') {
                        if (item.priceType === 'BP' && itemAfter.effDate == item.effDate && isARTR(itemAfter.priceType)) {
                            item.expDate = itemAfter.effDate;
                        } else if (itemAfter.priceType == 'BP' && item.expDate === '2049-12-31' && item.effDate == item.effDate && isARTR(item.priceType)) {
                            itemAfter.expDate = item.effDate;
                        }
                    }
                    if (item.effDate === item.expDate) {
                        itemList.splice(s, 1);
                        s = s - 1;
                        continue;
                    }
                    jumpFlag = true;
                    continue;
                }
            }
            var changeDate = false;
            if (!isNull(item.type) && item.type === 'old') {
                //更改旧值结束日期为新值开始日期
                if (dateCompare(itemAfter.expDate, item.effDate) >= 0 || item.expDate === '2049-12-31') {
                    item.expDate = itemAfter.effDate;
                    changeDate = true;
                }
            }
            //如果不是第一条数据
            if (!isNull(itemBef)) {
                //如果时第一位则比较后面的时间字段

                var flag1 = isDateBetween(item.effDate, itemBef.effDate, itemBef.expDate);

                //如果当前时间的开始日期再前一个时间的范围值内，或者两个开始时间相等，则删除当前数据，循环索引减1
                if ((flag1 || item.effDate === itemBef.effDate) || (changeDate && item.effDate === item.expDate)) {

                    if (item.priceType === 'BP' && item.type === 'old' && itemBef.priceType ==='TR') {
                        itemList.splice(s, 1);
                        s = s - 1;
                        continue;
                    }else if (itemBef.priceType === 'BP' && item.type === 'old' && item.priceType ==='TR'){
                        itemList.splice(x, 1);
                        s = s - 1;
                        continue;
                    }else if (item.type === 'old') {
                        itemList.splice(s, 1);
                        s = s - 1;
                        continue;
                    }
                }
            }
            if (!(comment === 'retail-NoBP')) {
                if (item.expDate < itemAfter.effDate && item.type !== 'old') {
                    var addItem;
                    if (item.cost) {
                        var cost;
                        if (itemBef) {
                            cost = itemBef.cost;
                        } else {
                            cost = item.cost;
                        }
                        addItem = {
                            itemNbrT: item.itemNbrT,
                            effDate: item.expDate,
                            expDate: itemAfter.effDate,
                            priceType: item.priceType,
                            type: 'new',
                            priceTrait: item.priceTrait,
                            cost: cost,
                            size: item.size,
                            rate: item.rate,
                            id: item.id
                        };
                    }
                    if (!isNull(item.retail)) {
                        var retail;
                        if (!isNull(itemBef)) {
                            retail = itemBef.retail;
                        } else {
                            retail = item.retail;
                        }
                        addItem = {
                            itemNbrT: item.itemNbrT,
                            effDate: item.expDate,
                            expDate: itemAfter.effDate,
                            priceType: item.priceType,
                            type: 'new',
                            priceTrait: item.priceTrait,
                            retail: retail,
                            size: item.size,
                            rate: item.rate,
                            id: item.id,
                        };
                    }
                    insert(itemList, y, addItem);
                    s--;
                }
            }

        }
    }
}
